home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekkan Dennou Club 142
/
Gekkan Dennou Club - 2000.3 Vol. 142 (Japan).7z
/
Gekkan Dennou Club - 2000.3 Vol. 142 (Japan) (Track 1).bin
/
tools
/
s_tool
/
jx250.c
< prev
next >
Wrap
Text File
|
1999-06-08
|
10KB
|
401 lines
#include "JX250.H"
#include <sys\iocs.h>
#include <sys\dos.h>
#include <sys\scsi.h>
#include <stdio.h>
#include <stdlib.h>
//====== 環境ファイルに記録
//--- SCSI ID
int SCSI_ID;
//--- プリ座標
int PreX1,PreY1;
int PreX2,PreY2; //
int PreXV1,PreYV1; // 表示座標に変換した物
int PreXV2,PreYV2;
int PreBai; // 0;標準 1;x2 2;x3 3;x4
int PrePX,PrePY; // 拡大表示の時のイメージ表示座標
int PreViewS; // 0;画質。1;速度
//--- スキャンサイズ
int ScanDpiX,ScanDpiY;
int ScanDotX,ScanDotY;
int ScanSpeed; // 0;低速。1;速度
//--- 補正
int Bright; // 濃度
int LightM; // 明度
int LightR; // 明度
int LightG; // 明度
int LightB; // 明度
int GammaM; // γ *100 の値
int GammaR; // γ
int GammaG; // γ
int GammaB; // γ
int ThreM; // しきい値
int ThreR; // しきい値
int ThreG; // しきい値
int ThreB; // しきい値
//--- モード
int ScanMode; // スキャン値の単位 0;DOT 1;DPI
int PreUnit; // プリスキャン値の単位 0;dot 1;cm 2;inch
int ImageMode; // 0;カラー 1;白黒
int ImageColMode; // 0;多値 1;二値
int ImageDirec; // 0;縦 1;横
int PojiNegaMode; // 0;ポジ 1;ネガ
int DropColor; // 0;なし 1;R 2;G 3;B
int FullColor; // 0;64k color 1;24bit color
int C64halfMode; // 0;中間処理あり 1;なし
int JpegedUseMode; // 0;64k の時使用する 1;使用しない
int SaveFrmMode; // 0;スキャンサイズに変更
int ReadPacketMode; // 0;一括 1;分割
//--- JPEG
UNchar JpegSwc[128]; // Jpeg セーブの文字列
UNchar Jpeg24Swc[128]; // Jpeg セーブの文字列
UNchar RGBtemp[128]; // EJ,DJ のテンポラリパス
//--- その他
int AspMode; // 「画像」の 0;(2:3) 1;(1:1)
int FilerSortMode; // 0;dir 1;filename 2;日付 3;Size
int FilerAllMode; // 0;関係ファイルのみ表示 1;全ファイル表示
//====== 非記録
//---
UNchar *ScanData; //「画像」データのポインタ
int ScanDataX; //「画像」の大きさ
int ScanDataY; //「画像」の大きさ
UNchar *PreData; // [(232)*(480)*2]; // 「プリスキャン」データ
//===
UNshort olgtcl[16];
UNchar diabak[165*205*2]; // ダイアログ用のバッファ
int orgerrvct;
char CUR_path[256]; /*起動時のパス*/
int jxscanner; // 0;jx250 -1;jx330 1;jx350
int jxscanner_; // ファイル名 -4;null 0;jx250 -1;jx330 1;jx350
char jxname[8][4]={
""," ","32","33",
"25","35","27"," "
};
UNchar *MAP;
int breakck;
void END_DISP();
/*--------------------------------------------------*/
void main(ar,av)
int ar;
UNchar **av;
{
int i;
int ssp;
UNchar cnfn[256];
int matfg;
int ggcfg;
struct _psp *getpdb;
matfg=0;
ggcfg=0;
breakck=_dos_breakck(-1);
_dos_breakck(2);
cnfn[0]=0;
//--- 実行ファイル名チェック
getpdb=_dos_getpdb();
if ( getpdb->exe_name[6]=='2' && getpdb->exe_name[7]=='5' ){
jxscanner = _JX250_;
jxscanner_ = _JX250_;
} elif ( getpdb->exe_name[6]=='3' && getpdb->exe_name[7]=='5' ){
jxscanner = _JX350_;
jxscanner_ = _JX350_;
} elif ( getpdb->exe_name[6]=='2' && getpdb->exe_name[7]=='7' ){
jxscanner = _JX270_;
jxscanner_ = _JX270_;
} elif ( getpdb->exe_name[6]=='3' && getpdb->exe_name[7]=='3' ){
jxscanner = _JX330_;
jxscanner_ = _JX330_;
} elif ( getpdb->exe_name[6]=='3' && getpdb->exe_name[7]=='2' ){
jxscanner = _JX325_;
jxscanner_ = _JX325_;
} else {
jxscanner = _JX250_; // 0;jx250 -1;jx330 1;jx350
jxscanner_ = -4;
}
JxLogoChain();
//----
printf( "X68k SHARP JX-SCANNER 画像入力ツール Version 1.03 Copyright 1997-1999 満開製作所\n");
//---- コマンドライン解析
for(i=1;i<ar;i++){
if ( av[i][0]=='-' || av[i][0]=='/' ){
switch(av[i][1]|0x20){
case('s'):
PreViewS=1; // 0;画質。1;速度
break;
case('x'):
FullColor=1; // 0;64k color 1;24bit color
break;
case('i'):
//--- SCANNER ID
SCSI_ID=atoi(&av[i][2]);
break;
case('f'):
//--- コンフィグファイル指定
jstrcpy(cnfn,&av[i][2]);
break;
case('v'):
//--- MATIER の仮想画面に読み込む。
matfg=-1;
ggcfg=-1;
break;
case('c'):
ggcfg=-1;
break;
case('p'):
case('b'):
case('y'):
break;
case('h'):
case('?'):
Help();
return;
default:
printf(" スイッチが異常です。\n");
return;
}
} else {
printf(" コマンドラインが異常です。\n");
return;
}
}
//--- メモリ確保
PreData=_dos_malloc( (232)*(480)*2 ); // 「プリスキャン」データ
if ( PreData>=0x81000000 ){
i=(int)PreData;
i&=0x00FFFFFF;
printf(" メモリが足りません。後 %d byte 必要です。\n",((232)*(480)*2)-i);
printf( "\n [何かキーを押して下さい]");
_dos_kflushio(0xFF);
_dos_inkey();
_dos_kflushio(0xFF);
printf( "\n");
return;
} else {
UNint *MM;
MM=(void*)PreData;
for(i=0;i<((232)*(480)*2)/4;i++)
*MM++=0;
}
//-------- 初期化
SCSI_ID=0;
ScanMode=0;
ScanDotX=512*DOTB;
ScanDotY=512*DOTB;
ScanDpiX=3000000;
ScanDpiY=4500000;
LightM=0x8000; // 明度
LightR=0x8000;
LightG=0x8000;
LightB=0x8000;
Bright=128; // 濃度
GammaM=100; // γ
GammaR=100;
GammaG=100;
GammaB=100;
ThreM=128; // しきい値
ThreR=128;
ThreG=128;
ThreB=128;
RecSavMode=1; // 0;CUT 1;PIC 2;JPEG 3;PIC2 4;JPEG 5;RGB
GrayPoint=15; // グレイスケールの値
MonoPoint=15*8; // 二値化の値
AspMode=1; //「画像」の 0;(2:3) 1;(1:1)
C64halfMode=1; // 0;中間処理あり 1;なし
if ( _iocs_b_bpeek((void*)0x0cbc)==0 ){
// 000 機用
PreViewS=1; // 0;画質。1;速度
ScanSpeed=1; // 0;遅い。1;速い
JpegedUseMode=0; // 0;64k の時使用する 1;使用しない
} else {
// 0x0 機用
PreViewS=0; // 0;画質。1;速度
ScanSpeed=1; // 0;遅い。1;速い
JpegedUseMode=1; // 0;64k の時使用する 1;使用しない
}
CalcScanDD();
ReadPacketMode=1; // 0;一括 1;分割
//--- MAT チェック
mat_vadds=0;
if ( matfg!=0 ){
if ( MatDefRead() ){
printf( " -v は無視します。\n");
printf( "\n [何かキーを押して下さい]");
_dos_kflushio(0xFF);
_dos_inkey();
_dos_kflushio(0xFF);
printf( "\n");
matfg=0;
//return;
} else {
ScanData=mat_vadds;
ScanDataX=mat_xwidth;
ScanDataY=mat_ywidth;
DataC=0;
DataX=mat_xwidth;
}
}
if ( ggcfg!=0 && ScanData==0 ){
UNint *M,*N;
M=_dos_malloc(512*512*2);
if ( M>=0x81000000 ){
printf( " メモリが足りませんでした。\n");
printf( " G-RAM のデータは破棄します。\n");
printf( "\n [何かキーを押して下さい]");
_dos_kflushio(0xFF);
_dos_inkey();
_dos_kflushio(0xFF);
printf( "\n");
} else {
ScanData=M;
ssp=_iocs_b_super(0);
N=0xC00000;
for(i=0;i<0x80000/4;i++)
*M++=*N++;
if ( ssp>=0 )
_iocs_b_super(ssp);
ScanDataX=512;
ScanDataY=512;
DataX=512;
DataC=0;
}
}
//--- パスチェック
GetDrvDir(0,CUR_path);
GetDrvDir(0,Apath);
//-- コンフィグファイルチェック
ChDrvDir(CUR_path);
ReadCnf(cnfn);
//-- SCSI 機器チェック
i=AutoSreachJX(SCSI_ID,0); // 指定の機種はあるか?
if ( i>=0 && i<=15 ){
SCSI_ID=i;
} else {
i=AutoSreachJX(SCSI_ID,0); // なんかある?
if ( i>=0 && i<=15 )
SCSI_ID=i;
}
//--- アボート&キー設定
_dos_fnckeygt(0,FncKeyOrg); //オリジナルのファンクションキーを記憶
orgerrvct=(int)_dos_intvcs(0xFFF1,(void*)END_DISP);
_dos_fnckeyst(0,FncKeyJX); // JX のファンクションキーをセット
//--- 画面準備
ssp=_iocs_b_super(0);
for(i=0;i<16;i++)
olgtcl[i]=*(UNshort*)(0xe82200+i*2);
if ( ssp>=0 )
_iocs_b_super(ssp);
_iocs_tgusemd(0,2);
_iocs_tgusemd(1,2);
mouse(1);
_dos_c_curoff();
_iocs_crtmod(12);
_iocs_g_clr_on();
TXCLS(0);
SetMsPat();
MsPat(-1);
//--
InitScrren();
//--------
for(;;){
move();
if ( Dialog(0,"環境を記録しますか?",0,2)!=0 )
break; // いいえ=おわり
ChDrvDir(CUR_path);
if ( CreateCnf(cnfn)==0 )
break; // 成功=おわり
i=Dialog(
"環境ファイルの書き出しに失",
"敗しました。終了してもよろ",
"しいですか?",
2
);
if ( i==0 )
break; // よろしい=おわり
}
if ( ggcfg!=0 && ScanData!=0 ){
//printf(" 画面は残す~\n");
RecVwBai=0;
END_DISP_();
_iocs_b_wpoke((void*)0xE82600,0x193F);
ScanGraphView(0,0,1);
return;
}
END_DISP();
}
/*****************************************
終わり
**************************************/
void END_DISP()
{
_iocs_g_clr_on();
_iocs_crtmod(16);
_dos_c_fnkmod(0);
egs_sub();
END_DISP_();
exit(0);
}
/*+++++++++++*/
void END_DISP_()
{
int i,ssp;
TXCLS(1); //全TEXT 掃除
ssp=_iocs_b_super(0);
if ( olgtcl[15]!=0 ){
for(i=0;i<16;i++)
*(UNshort*)(0xe82200+i*2)=olgtcl[i];
}
*(UNchar*)0xe8e007&=0xFD;
if ( ssp>=0 )
_iocs_b_super(ssp);
_dos_c_curon();
mouse(2);
mouse(0);
_dos_kflushio(0xFF);
_dos_breakck(0); /*break on*/
_iocs_tgusemd(0,0);
_iocs_tgusemd(1,1);
_dos_intvcs(0xFFF1,(void*)orgerrvct);
_dos_fnckeyst(0,FncKeyOrg); //オリジナルのファンクションキーをセット
ChDrvDir(CUR_path);
_dos_breakck(breakck);
}
/*****************************************
ヘルプ
**************************************/
void Help()
{
char *ss;
ss=jxname[jxscanner_+4];
printf( "\n"
"[使用法] S_TOOL%s.x [switch]\n"
"\n"
" [switch]\n"
" -V ・・・・・・・・・・・・ MATIER の仮想画面に読み込む。環境変数`MATIER'\n"
" の設定が必要です。\n"
" -C ・・・・・・・・・・・・ 起動時、G-RAM の画像をスキャン画像とし、\n"
" 終了時、スキャン画像を表示する。\n"
// " -A ・・・・・・・・・・・・ 起動後スキャニングし終了する。画像データは\n"
// " VRAM に残る。\n"
// " -1 ・・・・・・・・・・・・ 画像画面を 1:1 にする。\n"
" -I[n] ・・・・・・・・・ JX-SCANNER の接続している SCSI-ID を指定。\n"
// " -S ・・・・・・・・・・・・ プレスキャン、画像より速度を優先させる。\n"
" -F[cnfname] ・・・ 環境ファイル名を指定。指定がない場合\n"
" S_TOOL%s.x と同じディレクトリの S_TOOL%s.CNF\n"
" を使用する。\n"
// " -W[path] ・・・・・・ メモリがたりない場合のテンポラリファイルのパ\n"
// " スを指定する。指定がない場合メモリ切れで中断\n"
// " する\n"
"\n"
// " 環境変数`JX250'がコマンドラインに付加されます。\n"
// "\n"
,ss,ss,ss,ss
);
}